<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 注意this的指向问题：constructor里面的this指向的是 创建的实例对象
        //                    函数内的this，谁调用指向谁        

        // 构造函数 与 类的区别：继承方法不同，后者更符合面向对象的编程思想

        // 对象原型(__proto__)和构造函数原型对象(prototype)中的 constructor 属性指向的
        // 就是构造函数，用于记录该对象引用的是哪个构造函数。
        // 构造函数中的this指向的是对象实例，原型对象里面的this指向的也是对象实例

        class Father{
            constructor(x,y){
                this.x = x
                this.y = y
            }
            sum(){
                console.log(this.x + this.y);
            }
            money(){
                console.log(10000);
            }
            say(){
                return '我是爸爸'
            }
        }

        class Son extends Father{
            constructor(x,y){
                super(x,y)   //super相当于调用了父类的constructor(即向父类传递参数),借此可以调用父类的计算方法
                this.x = x   //子类的this必须在super调用之后
                this.y = y
            }
            say(){
                console.log(super.say() + '的儿子');
            }
            subtract(){
                console.log(this.x - this.y);
            }
        }

        const son = new Son(98,2)
        son.money()  //调用普通函数
        son.subtract()
        son.sum()    //super调用计算函数
        son.say()    //super调用普通函数
    </script>
</body>
</html>